package com.music.controller;

import com.music.pojo.UserInfo;
import com.music.service.UserService;
import com.music.utils.MailUtils;
import com.music.utils.ResultInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.SpringServletContainerInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

@Controller
@RequestMapping("check")
public class CheckController {
    @Autowired
    private UserService userService;
    @RequestMapping("check_code")
    public void code(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //服务器通知浏览器不要缓存
        response.setHeader("pragma","no-cache");
        response.setHeader("cache-control","no-cache");
        response.setHeader("expires","0");

        //在内存中创建一个长80，宽30的图片，默认黑色背景
        //参数一：长
        //参数二：宽
        //参数三：颜色
        int width = 80;
        int height = 30;
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        //获取画笔
        Graphics g = image.getGraphics();
        //设置画笔颜色为灰色
        g.setColor(Color.GRAY);
        //填充图片
        g.fillRect(0,0, width,height);

        //产生4个随机验证码，12Ey
        String checkCode = getCheckCode();
        //将验证码放入HttpSession中
        request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);

        //设置画笔颜色为黄色
        g.setColor(Color.YELLOW);
        //设置字体的小大
        g.setFont(new Font("黑体",Font.BOLD,24));
        //向图片上写入验证码
        g.drawString(checkCode,15,25);

        //将内存中的图片输出到浏览器
        //参数一：图片对象
        //参数二：图片的格式，如PNG,JPG,GIF
        //参数三：图片输出到哪里去
        ImageIO.write(image,"PNG",response.getOutputStream());
    }
    /**
     * 产生4位随机字符串
     */
    public String getCheckCode() {
        String base = "0123456789ABCDEFGabcdefg";
        int size = base.length();
        Random r = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i=1;i<=4;i++){
            //产生0到size-1的随机值
            int index = r.nextInt(size);
            //在base字符串中获取下标为index的字符
            char c = base.charAt(index);
            //将c放入到StringBuffer中去
            sb.append(c);
        }
        return sb.toString();
    }

    @RequestMapping("verify_code")
    @ResponseBody
    public ResultInfo verify_code(HttpServletRequest request, String code) {
        String realCode = (String) request.getSession().getAttribute("CHECKCODE_SERVER");
        ResultInfo resultInfo = new ResultInfo();
        if (code.equalsIgnoreCase(realCode)){
            resultInfo.setFlag(true);
        }else {
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("验证码错误");
        }
        return resultInfo;
    }

    @RequestMapping("verify_registerCode")
    @ResponseBody
    public ResultInfo verify_registerCode(HttpServletRequest request,String code){
        return userService.verify_registerCode(request,code);
    }

    @RequestMapping("verify_email")
    @ResponseBody
    public ResultInfo verify_name(String email){
        ResultInfo resultInfo = new ResultInfo();
        try {
            userService.find_verifyEmail(email);
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("邮箱已存在");
        }catch (Exception e){
            resultInfo.setFlag(true);
        }
        return resultInfo;
    }

    @RequestMapping("sendEmail")
    @ResponseBody
    public ResultInfo sendMail(HttpServletRequest request,String email){
        ResultInfo resultInfo = new ResultInfo();
        String code = getCheckCode();
        HttpSession session = request.getSession();
        session.setAttribute("code",code);
        String text = "验证码为:"+code;
        try {
            MailUtils.sendMail(email,text,"music平台邮箱验证码");
            System.out.println(text);
            resultInfo.setFlag(true);
        }catch (Exception e){
            resultInfo.setFlag(false);
        }
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                session.removeAttribute("code");
                System.out.println("验证码过期");
            }
        };
        // 60秒后执行任务
        timer.schedule(task, 60000);
        return resultInfo;
    }
}